package com.poi;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.joda.time.DateTime;
import org.junit.Test;

import java.awt.print.Pageable;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;

public class ExcelRead {
    private static String Path="E:\\Project\\ljj-first-poi\\";
    @Test
    public void ExcelReadTest() throws IOException {
        //获取文件流
        FileInputStream fileInputStream=new FileInputStream(Path+"test.xls");
        //1.获取工作博
        Workbook workbook=new HSSFWorkbook(fileInputStream);
        //2.得到工作表
        Sheet sheet=workbook.getSheetAt(0);
        //3.得到行
        Row row=sheet.getRow(0);
        Cell cell=row.getCell(0);

        System.out.println(cell.getNumericCellValue());
        fileInputStream.close();
//        用户发送请求到前端控制器，前端控制器收到请求调用处理器映射器
//                处理器映射器 生成处理器对象和处理器拦截器一并返回给 前端控制器
//                前端控制器调用处理器适配器
//                处理器适配器经过适配调用后端控制器
//                        后端控制器执行结束返回modelandview返回给端控制器
//                        前端控制器将modelandview发送给视图解析器
//                                视图解析器经过解析 将view传给前端控制器
//                                        前端控制器通过view渲染视图

    }
    @Test
    public void ExcelReadType() throws IOException {
        //获取文件流
        FileInputStream fileInputStream=new FileInputStream(Path+"ljjtest.xlsx");
        //1.获取工作博
        Workbook workbook=new XSSFWorkbook(fileInputStream);
        //2.得到工作表
        Sheet sheet=workbook.getSheetAt(0);
        //3.得到行
        Row rowtitle=sheet.getRow(1);
        int cellCount =rowtitle.getPhysicalNumberOfCells();
        for (int cellNum=0;cellNum<cellCount;cellNum++){
            Cell cell=rowtitle.getCell(cellNum);
            if (cell!=null){
                CellType cellType = cell.getCellType();
                System.out.println(cellType);
//                String cellValue=cell.getStringCellValue();
                String cellValue= ExcelRead.convertCellValueToString(cell);
                System.err.print(cellValue+"|");
            }
        }


        //System.out.println(cell.getNumericCellValue());
        fileInputStream.close();
    }
    @Test
    public void ExcelReadLjj() throws IOException {
        //获取文件流
        FileInputStream fileInputStream=new FileInputStream(Path+"ljjtest.xlsx");
        //1.获取工作博
        Workbook workbook=new XSSFWorkbook(fileInputStream);
        //2.得到工作表
        Sheet sheet=workbook.getSheetAt(0);
        //3.得到行
        //获取标题
        Row rowtitle=sheet.getRow(0);
        int cellCount=rowtitle.getPhysicalNumberOfCells();
        if (rowtitle!=null){
            for (int cellNum=0;cellNum<cellCount;cellNum++){
                Cell cell=rowtitle.getCell(cellNum);
                String cellValue=cell.getStringCellValue();
                System.out.print(cellValue+"|");
            }
            System.out.println("");
        }
        //获取表中的内容
        int rowCount=sheet.getPhysicalNumberOfRows();
        for (int rowNum =1; rowNum <rowCount ; rowNum++) {
            Row rowData=sheet.getRow(rowNum);
            if (rowData!=null){
                for (int cellNum=0;cellNum<cellCount;cellNum++){
                    Cell cell=rowData.getCell(cellNum);
                    String cellValue=ExcelRead.convertCellValueToString(cell);
                    System.out.print(cellValue+"|");
                }
                System.out.println("");
            }
        }
        //System.out.println(cell.getNumericCellValue());
        fileInputStream.close();
    }


    private static String convertCellValueToString(Cell cell) {
        if(cell==null){
            return null;
        }
        String returnValue = null;
        switch (cell.getCellType()) {
            case NUMERIC:   //数字
                Double doubleValue = cell.getNumericCellValue();

                // 格式化科学计数法，取一位整数
                DecimalFormat df = new DecimalFormat("0");
                returnValue = df.format(doubleValue);
                break;
            case STRING:    //字符串
                returnValue = cell.getStringCellValue();
                break;
            case BOOLEAN:   //布尔
                Boolean booleanValue = cell.getBooleanCellValue();
                returnValue = booleanValue.toString();
                break;
            case BLANK:     // 空值
                break;
            case FORMULA:   // 公式
                returnValue = cell.getCellFormula();
                break;
            case ERROR:     // 故障
                break;
            default:
                break;
        }
        return returnValue;
    }
}

